import numpy as np
import pandas as pd
import matplotlib as plt
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import json
data = pd.read_csv("data_new.csv", delimiter=';')
with open('ukraine.json', 'r') as f:
ukraine = json.load(f)
for i in ukraine['features']:
i['id'] = i['properties']['NAME_1']
df = data[data['рік'] == 2017]
df["об'єм"] = data[data['рік'] == 2017]["об'єм"].to_numpy() - data[data['рік'] == 2010]["об'єм"].to_numpy()
df = pd.concat([data[data['рік'] == 2010], df])
news_column = []
for i in range(len(df)):
if df.iloc[i]['рік'] == 2010:
news_column.append("Об'єм в 2010 році")
elif df.iloc[i]["об'єм"] >= 0:
news_column.append("Збільшення об'єму в 2017 році порівняно з 2010 роком")
else:
news_column.append("Зменшення об'єму в 2017 році порівняно з 2010 роком")
df['значення'] = news_column
C:\Users\328F~1\AppData\Local\Temp/ipykernel_30432/2253664542.py:2: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy df["об'єм"] = data[data['рік'] == 2017]["об'єм"].to_numpy() - data[data['рік'] == 2010]["об'єм"].to_numpy()
fig = px.bar(df, orientation='v', y = "об'єм", x = "регіон", color = 'значення', facet_col = "вид", barmode='stack', height=600, color_discrete_sequence=['#636EFA','#00CC96','#EF553B'], labels={
"значення": "Значення",
"вид": "Вид діяльності",
"регіон": "Регіон",
"об'єм": "Об'єм"
},)
fig.update_layout(
title = "Зміна структури ВДВ по регіонах України за 2017 рік порівняно з 2010 роком",
showlegend = True,
template = "plotly_dark"
)
fig.update_layout(legend=dict(
orientation="h",
yanchor="bottom",
y=1.1,
xanchor="right",
x=1.00
))
oblasti_to_codes = {'Черкаська':'Cherkasy',
'Чернігівська':'Chernihiv',
'Чернівецька':'Chernivtsi',
'':'Crimea',
'Дніпропетровська':"Dnipropetrovs'k",
'Донецька':"Donets'k",
'Івано-Франківська':"Ivano-Frankivs'k",
'Харківська':'Kharkiv',
'Херсонська':'Kherson',
'Хмельницька':"Khmel'nyts'kyy",
'Київська':'Kyiv',
'м.Київ':'Kyiv City',
'Кіровоградська':'Kirovohrad',
'Львівська':"L'viv",
'Луганська':"Luhans'k",
'Миколаївська':'Mykolayiv',
'Одеська':'Odesa',
'Полтавська':'Poltava',
'Рівненська':'Rivne',
'Сумська':'Sumy',
'Тернопільська':"Ternopil'",
'Закарпатська':'Transcarpathia',
'Вінницька':'Vinnytsya',
'Волинська':'Volyn',
'Запорізька':'Zaporizhzhya',
'Житомирська':'Zhytomyr'}
df_map = df[df['рік'] == 2017].copy()
df_map['region'] = df_map['регіон'].map(oblasti_to_codes)
df_map = df_map.dropna()
typs = df_map['вид'].unique()
res_df = df_map.copy()[df_map.copy()['вид'] == typs[0]]
c1 = pd.DataFrame(np.expand_dims(np.array(['Крим - немає даних', 2017, 0.0, typs[0], "Збільшення об'єму в 2017 році порівняно з 2010 роком", 'Crimea']), axis=-1).T)
c1.columns = res_df.columns
res_df = pd.concat([res_df, c1]).reset_index(drop=True)
for typ in typs[1:]:
proc_df = df_map.copy()[df_map.copy()['вид'] == typ]
c1 = pd.DataFrame(np.expand_dims(np.array(['Крим - немає даних', 2017, 0.0, typ, "Збільшення об'єму в 2017 році порівняно з 2010 роком", 'Crimea']), axis=-1).T)
c1.columns = res_df.columns
res_df = pd.concat([res_df, proc_df, c1]).reset_index(drop=True)
df_map = res_df
fig = make_subplots(
rows=3, cols=2,
vertical_spacing = 0.02,
subplot_titles=['Вид діяльності: ' + i for i in ['сільське господарство', 'послуги', 'промисловість', 'державне управління', 'будівництво']],
# column_widths=[0.6, 0.4],
# row_heights=[0.4],
specs=[[{"type": "choroplethmapbox", },
{"type": "choroplethmapbox"}],
[{"type": "choroplethmapbox"},
{"type": "choroplethmapbox"}],
[{"type": "choroplethmapbox", "colspan": 2},
{"type": "choroplethmapbox", "colspan": 0}],
]
)
positions = [[1, 1], [1, 2], [1, 3], [2, 1], [2, 2], [2, 3]]
for i in range(len(df_map.вид.unique())):
r, c = positions[i]
typ = df_map.вид.unique()[i]
fig.add_trace(go.Choroplethmapbox(geojson=ukraine, locations = df_map.region, z=df_map[df_map['вид'] == typ]["об'єм"], zmid = 0, hovertext = df_map['регіон'],
marker_opacity=0.7, marker_line_width=0, name=typ, subplot = f"mapbox{i+1}"
),row=c, col=r)
fig.update_layout(
title = "Зміна структури ВДВ по регіонах України за 2017 рік порівняно з 2010 роком",
mapbox1_style="carto-darkmatter",
mapbox2_style="carto-darkmatter",
mapbox3_style="carto-darkmatter",
mapbox4_style="carto-darkmatter",
mapbox5_style="carto-darkmatter",
mapbox1_zoom=4,
mapbox2_zoom=4,
mapbox3_zoom=4,
mapbox4_zoom=4,
mapbox5_zoom=4,
mapbox1_center = {"lat": 48.3794, "lon": 31.1656},
mapbox2_center = {"lat": 48.3794, "lon": 31.1656},
mapbox3_center = {"lat": 48.3794, "lon": 31.1656},
mapbox4_center = {"lat": 48.3794, "lon": 31.1656},
mapbox5_center = {"lat": 48.3794, "lon": 31.1656}
)
# fig.update_coloraxes(showscale=False)
fig.data[0].colorbar.x=0.45
fig.data[0].colorbar.y=0.84
fig.data[0].colorbar.len=0.3
fig.data[3].colorbar.x=1
fig.data[3].colorbar.y=0.84
fig.data[3].colorbar.len=0.3
fig.data[1].colorbar.x=0.45
fig.data[1].colorbar.y=0.5
fig.data[1].colorbar.len=0.3
fig.data[4].colorbar.x=1
fig.data[4].colorbar.y=0.5
fig.data[4].colorbar.len=0.3
fig.data[2].colorbar.x=1
fig.data[2].colorbar.y=0.15
fig.data[2].colorbar.len=0.3
fig.update_layout(margin={"r":0,"l":0, "t":100 ,"b":0}, height = 1500, width = 1500, template = 'plotly_dark')